﻿namespace DimensionsHelper.CommandLine.ConsoleTracer;

public class NavigatorLocationChangedArgs(ConsoleLocation location) : EventArgs
{
    public ConsoleLocation Location { get; } = location;
}


public interface INavigatorRange
{
    /// <summary>
    ///     当区间发生变化时，触发的事件
    /// </summary>
    event EventHandler<NavigatorLocationChangedArgs> LocationChanged;


    /// <summary>
    ///     获取当前区间的位置
    /// </summary>
    ConsoleLocation GetLocation();


    /// <summary>
    ///     获取所在行
    /// </summary>
    INavigatorLine GetLine();


    /// <summary>
    ///     获取下一个区间
    /// </summary>
    INavigatorRange? Next();


    /// <summary>
    ///     刷新控制台显示的内容
    /// </summary>
    void Refresh();


    /// <summary>
    ///     更新区间的文本内容
    /// </summary>
    INavigatorRange UpdateContent(string newContent);


    /// <summary>
    ///     移动当前区间的位置，并刷新内容
    /// </summary>
    void Shift(ConsolePosition start);


    /// <summary>
    ///     将当前区间在行上进行平移
    /// </summary>
    void Shift(int shiftLine);


    /// <summary>
    ///     设置区间的文本颜色
    /// </summary>
    INavigatorRange SetForeground(ConsoleColor color);


    /// <summary>
    ///     设置区间的背景颜色
    /// </summary>
    INavigatorRange SetBackground(ConsoleColor color);


    /// <summary>
    ///     清空当前区间对应的控制台显示内容
    /// </summary>
    void Clear();
}